package com.itheima.intercept;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 拦截器学习
 */
public class HandlerInterceptDemo1 implements HandlerInterceptor {


    /**
     * 如何调用：安装拦截器定义的顺序调用
     *
     * 何时调用：只要配置了都会调用
     *
     * 有什么用： 返回true 继续执往下执行拦截器； 返回false 直接停止
     *
     */

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("Demo1：perHandle 执行了");
        return true;
    }

    /**
     * 何时调用：有拦截器链 返回true时调用
     * 有什么用： 再业务处理器处理完请求后，但是DispatchServlet向客户端返回响应前被调用
     *          在该方法中对用户请求的request进行处理
     */


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("Demo1：postHandle 执行了");
    }


    /**
     * 如何调用：
     *          按拦截器定义逆序调用
     * 何时调用：
     *          只有 preHandle 返回 true 才调用
     * 有什么用：
     *          在 DispatcherServlet 完全处理完请求后被调用，
     *           可以在该方法中进行一些资源清理的操作。
     */

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("Demo1：afterCompletion 执行了");
    }
}
